#pragma once

#include <map>
#include <string>
#include <vector>

using namespace std;

// 注意：时间戳类型使用 string，格式如 "YYYY-MM-DD HH:MM:SS"

/**
 * @brief 题目记录结构体 (Problem)
 * 存储单道题目的所有信息，包括做题过程和评估结果。
 */
struct Problem {
    string ProblemID;
    string Title;
    int Difficulty = 0;
    vector<string> Topics;

    string DateSolved = "";
    int TimeSpentMinutes = 0;
    bool UsedSolution = false;
    int AttemptCount = 0;
    string Omissions;

    float MasteryScore = 0.0f; // 实际掌握度 (A_mastery, 0.0-1.0)
    string NextReviewDate = "";
};

/**
 * @brief 算法专题结构体 (Topic)
 * 存储某个算法专题的整体信息。
 */
struct Topic {
    string Name;
    int Importance = 0;
    string LastReviewed = "";

    // 现存储该专题的平均掌握度指数 (Mastery Index * 1000)。例如 0.85 存储为 850。
    int TopicCFRating = 0;
};

/**
 * @brief 用户配置与评估结构体 (UserConfig)
 * 存储用户的目标 Rating、当前整体掌握度等。
 */
struct UserConfig {
    // 现存储整体平均掌握度指数 (Overall Mastery * 1000)，仅用于兼容旧的字段名。
    int CurrentCFEquivalent = 1500;

    // 实际存储的整体平均掌握度分数 (0.0 - 1.0)
    float OverallMasteryScore = 0.0f;

    // 目标 CF Rating，用于计算题目的期望掌握度和理想时间 (R_target)
    int TargetCFRating = 2000;

    // vector<int> RatingHistory; // 历史 Rating 记录已移除，聚焦当前掌握度
};
